package com.neusoft.ch6;

public class Matrix {

	// 属性

	// 行为
	/**
	 * 矩阵乘法
	 * 
	 * @param arr0
	 *            第一个乘数矩阵
	 * @param arr1
	 *            第二个乘数矩阵
	 * @return 结果矩阵
	 */
	public int[][] addArr(int[][] arr0, int[][] arr1) {
		// 返回的数组类型
		/*
		 * 返回结果数组：行数=第一个数组arr0的行数 返回结果数组：列数=第二个数组arr1的列数
		 */
		int[][] arrR = new int[arr0.length][arr1[0].length];

		// 结果的行数：行数取决于第一个矩阵的行数
		// i是结果矩阵的行数，第一个矩阵的行数
		for (int i = 0; i < arr0.length; i++) {
			// 结果的列数：列数取决于第二个矩阵的列数
			// j是结果矩阵的列数，第二个矩阵的列数
			for (int j = 0; j < arr1[i].length; j++) {

				// 使用循环计算结果举证的元素值:
				// 结算结果
				int sum = 0;
				// k的值既可以是第一个矩阵的列数，也可以是第二个矩阵的行数
				for (int k = 0; k < arr1.length; k++) {
					sum += arr0[i][k] * arr1[k][j];
				}

				// 将计算结果赋值给结果矩阵
				arrR[i][j] = sum;
			}
		}
		// 返回值
		return arrR;
	}

	/**
	 * 打印二维数组
	 * 
	 * @param arr
	 *            打印的数组
	 */
	public void printArr2D(int[][] arr) {
		// 遍历行数
		for (int i = 0; i < arr.length; i++) {
			// 遍历列
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print("  " + arr[i][j]);
			}
			// 换行
			System.out.println();
		}
	}
}
